package br.com.hs.nfe.common.to;

import br.com.hs.nfe.common.anotation.Element;
import br.com.hs.nfe.common.anotation.TypeEnum;
import br.com.hs.nfe.common.enumeration.ISSQNEnum;
import br.inf.portalfiscal.nfe.TCListServ;
import br.inf.portalfiscal.nfe.TNFe.InfNFe.Det.Imposto.ISSQN;
import java.math.BigDecimal;

/**
 * Classe de informações do ISSQN.
 * @author Ranlive Hrysyk
 */
public class IssqnTO extends BaseTO {

    @Element(publicName = "Valor da BC do ISSQN", type = TypeEnum.DECIMAL, decimalCount = 2)
    private BigDecimal vBC;
    @Element(publicName = "Alíq. do ISSQN", type = TypeEnum.DECIMAL, decimalCount = 2)
    private BigDecimal vAliq;
    @Element(publicName = "Valor do ISSQN", type = TypeEnum.DECIMAL, decimalCount = 2)
    private BigDecimal vISSQN;
    @Element(publicName = "Cód. Município ISSQN", type = TypeEnum.CARACTER, min = 7, max = 7)
    private String cMunFG;
    @Element(publicName = "Item Lista de Serviços", type = TypeEnum.ENUM, min = 3, max = 4, classType = TCListServ.Enum.class)
    private String cListServ;
    @Element(publicName = "Cód. Tributação do ISSQN", type = TypeEnum.ENUM, classType = ISSQN.CSitTrib.Enum.class)
    private ISSQNEnum cSitTrib;

    /**
     * Valor da BC do ISSQN.
     */
    public BigDecimal getVBC() {
        return vBC;
    }

    /**
     * Informar o valor da base de cálculo do ISSQN.
     * @param vBC Valor da BC do ISSQN
     */
    public void setVBC(BigDecimal vBC) {
        this.vBC = vBC;
    }

    /**
     * Alíquota do ISSQN.
     */
    public BigDecimal getVAliq() {
        return vAliq;
    }

    /**
     * Informar a alíquota do ISSQN.
     * @param vAliq Alíquota do ISSQN
     */
    public void setVAliq(BigDecimal vAliq) {
        this.vAliq = vAliq;
    }

    /**
     * Valor do ISSQN.
     */
    public BigDecimal getVISSQN() {
        return vISSQN;
    }

    /**
     * Informar o valor do ISSQN.
     * @param vISSQN Valor do ISSQN
     */
    public void setVISSQN(BigDecimal vISSQN) {
        this.vISSQN = vISSQN;
    }

    /**
     * Código do Município ISSQN.
     */
    public String getCMunFG() {
        return cMunFG;
    }

    /**
     * Informar o código do município de ocorrência do fato gerador do ISSQN.
     * @param cMunFG Código do Município ISSQN
     */
    public void setCMunFG(String cMunFG) {
        this.cMunFG = cMunFG;
    }

    /**
     * Item da Lista de Serviços.
     */
    public String getCListServ() {
        return cListServ;
    }

    /**
     * Informar o item da lista de serviços da LC 116/03 em que se classifica o serviço.
     * @param cListServ Item da Lista de Serviços
     */
    public void setCListServ(String cListServ) {
        this.cListServ = cListServ;
    }

    /**
     * Código de Tributação do ISSQN.
     */
    public ISSQNEnum getCSitTribEnum() {
        return cSitTrib;
    }

    /**
     * Código de Tributação do ISSQN.
     */
    public String getCSitTrib() {
        if (cSitTrib != null) {
            return cSitTrib.getCodigo();
        }
        return null;
    }

    /**
     * Informar o código de tributação do ISSQN.
     * @param cSitTrib Código de Tributação do ISSQN
     */
    public void setCSitTribEnum(ISSQNEnum cSitTrib) {
        this.cSitTrib = cSitTrib;
    }

    /**
     * Informar o código de tributação do ISSQN.
     * <p>Este campo deverá ser obrigatoriamente preenchido com:
     * <br>N - Normal;
     * <br>R - Retida;
     * <br>S - Substituta;
     * <br>I - Isenta.
     * </p>
     * @param cSitTrib Código de Tributação do ISSQN
     */
    public void setCSitTrib(String cSitTrib) {
        this.cSitTrib = ISSQNEnum.getEnumByCodigo(cSitTrib);
    }
}
